package br.ufc.apsoo.models;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;

import br.ufc.apsoo.validators.CPF;

@Entity
@Table(name = "hospede")
@SequenceGenerator(name = "seq_hospede", sequenceName = "seq_hospede")
public class Hospede {

	@Id
	@Column(name = "id")
	@GeneratedValue(generator = "seq_hospede", strategy = GenerationType.AUTO)
	private Long id;

	@NotNull(message = "O campo nome é obrigatório!")
	@NotEmpty(message = "O campo nome é obrigatório!")
	@Column(name = "nome")
	private String nome;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "id_pais")
	private Pais pais;

	@CPF
	@Column(name = "cpf")
	private String cpf;

	@Column(name = "passaporte")
	private String passaporte;

	@Column(name = "data_nascimento")
	private Date dataDeNascimento;

	@Column(name = "telefone")
	private String telefone;

	@Email
	@NotNull(message = "O campo email é obrigatório!")
	@NotEmpty(message = "O campo email é obrigatório!")
	@Column(name = "email")
	private String email;

	@Column(name = "senha")
	private String senha;

	@Transient
	private String confirmacaoDeSenha;

	public String getConfirmacaoDeSenha() {
		return confirmacaoDeSenha;
	}

	public String getCpf() {
		return cpf;
	}

	public Date getDataDeNascimento() {
		return dataDeNascimento;
	}

	public String getEmail() {
		return email;
	}

	public Long getId() {
		return id;
	}

	public String getNome() {
		return nome;
	}

	public String getSenha() {
		return senha;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setConfirmacaoDeSenha(String confirmacaoDeSenha) {
		this.confirmacaoDeSenha = confirmacaoDeSenha;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public void setDataDeNascimento(Date dataDeNascimento) {
		this.dataDeNascimento = dataDeNascimento;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}


	public Pais getPais() {
		return pais;
	}

	public void setPais(Pais pais) {
		this.pais = pais;
	}

	public String getPassaporte() {
		return passaporte;
	}

	public void setPassaporte(String passaporte) {
		this.passaporte = passaporte;
	}
}
